package Offer;

import java.util.Arrays;

/**
 *  n个骰子的点数
 * @author 是阿秋啊
 * @date 2022/08/18 19:46
 **/
public class Num60 {
    public double[] dicesProbability(int n) {
        // 先累计只有一个骰子的情况
        double[] dp = new double[6];
        Arrays.fill(dp,1.0/6.0);
        // 递推
        for(int i = 2; i <= n; i++) {
            // 以i= 2 为例: 当有二个骰子时,结果数量为11个(2 - 12);
            // 用tmp存储
            double[] tmp = new double[5 * i + 1];
            // j循环是循环加上第二个骰子之前的,一个骰子投出各个数值的概率
            for(int j = 0; j < dp.length; j++) {
                // k为新加入的骰子概率,只有六个面,即代码中 / 6.0 是因为每一面的概率都为1/6;
                for(int k = 0; k < 6; k++){
                    tmp[j + k] += dp[j] / 6.0;
                }
            }
            // 将tmp赋给dp,进入下一次递推
            dp = tmp;
        }
        return dp;
    }
}